package fr.iut2.tc4.gestionabsencesnotes.modelebean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.torque.NoRowsException;
import org.apache.torque.TooManyRowsException;
import org.apache.torque.TorqueException;
import org.apache.torque.util.Criteria;

import fr.iut2.tc4.gestionabsencesnotes.torque.generated.BaseGroupe;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.BaseGroupePeer;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.BaseNote;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.BaseNotePeer;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.Etudiant;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.EtudiantPeer;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.Groupe;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.GroupePeer;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.Note;
import fr.iut2.tc4.gestionabsencesnotes.torque.generated.NotePeer;

public class GestionFactory {

	private static final List<Etudiant> listEtudiants = new ArrayList<Etudiant>();

	// Retourne l'ensemble des etudiants
	public static List<Etudiant> getEtudiants() throws Exception {
		return EtudiantPeer.doSelectAll();
	}
	
	// Retourne l'ensemble des etudiants d'un groupe donnee
	@SuppressWarnings("unchecked")
	public static List<Etudiant> getEtudiantsParGroupe(String groupe) throws TorqueException, Exception {
		ArrayList<Etudiant> listEtudiantsParGroupe = new ArrayList<Etudiant>();
		Criteria crit = new Criteria();
		crit.add(BaseGroupePeer.NOM_GROUPE, groupe);
		Groupe grp = (Groupe)GroupePeer.doSelect(crit).get(0);
		listEtudiantsParGroupe = (ArrayList<Etudiant>)grp.getEtudiants();
		return listEtudiantsParGroupe;
	}
	//Retourne la liste des groupes
	public static List<Groupe> getGroupeList() throws Exception {
		List<Groupe> list = new ArrayList<Groupe>();
		list = GroupePeer.doSelectAll();
		Groupe groupeTous = new Groupe();
		groupeTous.setNomGroupe("Tous");
		list.add(0, groupeTous);
		return list;
	}
	/*
	//Modifie les absences de l'etudiant donnee
	public static void setAbsences(int id, int nbAbsences) {
		listEtudiants.get(id).setNbAbsences(nbAbsences);
	}
	*/
	public static void saveNoteFromRequest(Map<String, String[]> mapRequest) throws Exception{
		//System.out.println("saveNote from requete ");
		for(Entry<String, String[]> entry : mapRequest.entrySet()){
			//If pour ignorer les autres parametre dans la map de requete.
			if(entry.getKey().contains("idnote-") && !entry.getKey().equals("editNote")){
				int id = Integer.parseInt(entry.getKey().split("-")[1]);
				int valNote =  Integer.parseInt(entry.getValue()[0]);
				Note note = NotePeer.retrieveByPK(id);
				note.setValNote(valNote);
				if(note.getValNote() == -1){
					//System.out.println("delete");
					Criteria crit = new Criteria();
					crit.add(BaseNotePeer.ID_NOTE, id);
					NotePeer.doDelete(crit);
				}else{
					note.save();
					
				}
			}
		}
		
	}

	public static void saveNewNoteFromRequest(Map<String, String[]> mapRequest) throws Exception {
		Note note = new Note();
		for(Entry<String, String[]> entry : mapRequest.entrySet()){
			if(entry.getKey().equals("addNote-Etu")){
				note.setIdEtudiant(Integer.parseInt(entry.getValue()[0]));
			}else if(entry.getKey().equals("addNote-Val")){
				note.setValNote(Integer.parseInt(entry.getValue()[0]));
			}else if(entry.getKey().equals("addNote-Libelle")){
				note.setLibelleNote(entry.getValue()[0]);				
			}
		}
		System.out.println(note.toString());
		//Probleme nullpointerexception setPrimaryKey baseNote
		note.save();
	}

}
